基于esp32+红外模块实现简易的寻迹小车 您所在的位置:网站首页 esp8266 红外模拟 基于esp32+红外模块实现简易的寻迹小车

基于esp32+红外模块实现简易的寻迹小车

2024-07-14 21:09| 来源: 网络整理| 查看: 265

需要用到的硬件

此项目需要用到的硬件设备有Esp32芯片、3-5V电源模块、电机驱动模块、孔面包板、电机马达、3.7V锂离子充电电池、杜邦线、红外模块、舵机

小车固件各位可以去某宝搜索智能小车,各式各样的小车供以选择。

软件开发环境

开发软件:Arduion IDE 搭建有esp32开发环境

实现功能

此次项目要实现的主要功能就是:用PWM驱动四个电机,并能调速,实现转向功能;安装红外对管模块,实现红外循迹功能,能走8字;

主要代码

代码需要根据大家的连线更改端口号,在不同硬件也需要更改不同的参数。(大家在烧写代码的时候一定要关闭小车电源,不然很容易烧坏芯片)

#include int La, Lb, Ra,Med, Rb; int val = 0; Servo servo; int SERVO_PIN = 13; int IN1=25,IN2=33,IN3=27,IN4=26,R1=2,R2=4,R3=16,R4=5,R5=17;//定义端口 //int IN1=25,IN2=33,IN3=27,IN4=26,ENA=18,ENB=19,R1=2,R2=4,R3=16,R4=5,R5=17;//定义端口 void turnleft(); void turnright(); void straight(); void straightturnright(); void straightturnleft(); void setup() { pinMode(IN1, OUTPUT);//右 pinMode(IN2, OUTPUT);//右 pinMode(IN3, OUTPUT);//左 pinMode(IN4, OUTPUT);//左 //pinMode(ENA, OUTPUT); //pinMode(ENB, OUTPUT); pinMode(R1, INPUT); pinMode(R2, INPUT); pinMode(R3, INPUT); pinMode(R4, INPUT); pinMode(R5, INPUT); ledcSetup(5, 12000, 8); ledcSetup(6, 12000, 8); servo.attach(SERVO_PIN); } void straight() { digitalWrite(IN1, HIGH);//控制右轮滚动 digitalWrite(IN2, LOW);//右边轮胎前进后退,H后退,L前进 digitalWrite(IN3, LOW);//控制左轮前进后退 digitalWrite(IN4, HIGH);//控制左轮滚动 } void straightturnleft() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } void straightturnright() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } void turnleft() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } void turnright() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } //逻辑函数 void loop() { La = digitalRead(R1); Lb = digitalRead(R2); Med = digitalRead(R3); Ra = digitalRead(R4); Rb = digitalRead(R5); if (La == 1 && Lb == 1 && Med == 0 && Ra == 1 && Rb == 1) { straight(); servo.write(90); } if (La == 1 && Lb == 0 && Med == 1 && Ra == 1 && Rb == 1) { straightturnright(); servo.write(70); } if (La == 0 && Lb == 1 && Med == 1 && Ra == 1 && Rb == 1) {//左一 turnleft(); servo.write(60); analogWrite(IN4,100); analogWrite(IN1,160); } if (La == 1 && Lb == 1 && Med == 1 && Ra == 0 && Rb == 1) { straightturnleft(); servo.write(110); } if (La == 1 && Lb == 1 && Med == 1 && Ra == 1 && Rb == 0) {//左二 turnright(); servo.write(130); analogWrite(IN4,160); analogWrite(IN1,100); } } 展示图片



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有